package mybox.engine.rundfeder;

import static java.lang.Math.cos;
import static java.lang.Math.sin;
import static java.lang.Math.tan;
import mybox.engine.File4Qcad;
import mybox.engine.Line;
import mybox.engine.QVector;
import mybox.engine.Figur;

public class Sector implements Figur {
	
	File4Qcad file4qcad;
	public QVector center;
	public QVector start;
	public QVector end;
	public double startPhi;
	public double endPhi;
	public int anzahlSektoren;
	public double gesamtWinkel;
	public double innerSektorBreite;
	public double sektorPhi;
	public double radius;
	public Line[] linearr;
	
	public static final int defaultAnzahlSektoren=1000;
	
	public Sector(File4Qcad file4qcad, QVector start, double startPhi, double radius, double gesamtWinkel, int clockwise) {
		
		initialize(file4qcad, start, defaultAnzahlSektoren, 
				   radius, 
				   innerSectorBreite(radius,defaultAnzahlSektoren,gesamtWinkel), 
				   startPhi, sectorPhi(defaultAnzahlSektoren,gesamtWinkel), gesamtWinkel, 
				   clockwise);		
	}
		
	
	public Sector(File4Qcad file4qcad, QVector start, double startPhi, int anzahlSektoren, double radius, double gesamtWinkel, int clockwise) {
		
		
		initialize(file4qcad, start, anzahlSektoren, 
				   radius, 
				   innerSectorBreite(radius,anzahlSektoren,gesamtWinkel), 
				    startPhi, sectorPhi(anzahlSektoren,gesamtWinkel), gesamtWinkel, 
				    clockwise);
						
	}
	
	public Sector(File4Qcad file4qcad, QVector start, int anzahlSektoren, double innerSektorBreite, double startPhi, double gesamtWinkel, int clockwise) {
						
		initialize(file4qcad, start, anzahlSektoren, 
				    radius(innerSektorBreite,anzahlSektoren,gesamtWinkel), 
				    innerSektorBreite, 
				    startPhi, sectorPhi(anzahlSektoren,gesamtWinkel), gesamtWinkel, 
				    clockwise);
		
		
	}
	
	private void initialize(File4Qcad file4qcad, QVector start, 
			                  int anzahlSektoren, double radius, 
			                  double innerSektorBreite, 
			                  double startPhi, double sectorPhi, double gesamtWinkel, 
			                  int clockwise) {
		
		this.file4qcad=file4qcad;
		this.start=start;
		this.anzahlSektoren=anzahlSektoren;
		this.innerSektorBreite=innerSektorBreite;
		this.gesamtWinkel=gesamtWinkel;
		this.startPhi=startPhi;
		sektorPhi=sectorPhi(anzahlSektoren,gesamtWinkel);
		radius=radius(innerSektorBreite,anzahlSektoren,gesamtWinkel); 	
		linearr = new Line[anzahlSektoren];
		center = new QVector(start.x-radius*cos(startPhi), start.y-radius*sin(startPhi));
		
		for (int sectorIdx=0;sectorIdx<anzahlSektoren;sectorIdx++) {
			 double beginPhi=startPhi-clockwise*sectorIdx*sektorPhi;
			 double endPhi=startPhi-clockwise*(sectorIdx+1)*sektorPhi;
			 QVector beginLine = new QVector(center.x+radius*cos(beginPhi), center.y+radius*sin(beginPhi));
			 QVector endLine=new QVector(center.x+radius*cos(endPhi), center.y+radius*sin(endPhi));
			 linearr[sectorIdx]=new Line(file4qcad,beginLine, endLine);				 
		}
		end=linearr[anzahlSektoren-1].end;
		endPhi=startPhi-clockwise*(anzahlSektoren)*sektorPhi;
	}
	
	public static double sectorPhi(int anzahlSektoren, double gesamtWinkel) {
		return (gesamtWinkel)/anzahlSektoren;
	}
	
	public static double radius(double innerSektorBreite, int anzahlSektoren, double gesamtWinkel) {		
		return (innerSektorBreite/2)/tan(sectorPhi(anzahlSektoren,gesamtWinkel)/2);
	}
	
	public static double innerSectorBreite(double radius, int anzahlSektoren, double gesamtWinkel) {
		return 2*radius*tan(sectorPhi(anzahlSektoren,gesamtWinkel)/2);
	}
	
	@Override
	public void draw() {		
		for (Line line : linearr) {
			line.draw();
		}
		
	}

}


